/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

/**
 *
 * @author alexHD
 */
public class BaseModelo {

    /**
     * es la estructura que almacena los datos
     */
    protected Fila datos = new Fila();

    /**
     * Metodo que asigna un valor a una columna en la tabla.
     * @param campo columna de la tabla
     * @param valor valor a asignar a la columna
     */
    protected void asignarCampo(String campo, String valor) {

        /*******/
        try {
            datos.setValor(campo, valor);
        } catch (Exception e) {
            try {
                datos.adicionar(campo, valor);
            } catch (Exception ex) {
            }
        }
    }

    /**
     * Metodo que asigna un valor a una columna en la tabla.
     * @param campo columna de la tabla
     * @param valor valor a asignar a la columna
     */
    protected void asignarCampo(String campo, Date valor) {
        // NOTA:  el objeto SimpleDateFormat no es seguro para multiples hilos.
        // por esta razÃ³n su uso es localizado.  no poner como variable del objeto
        SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
        try {
            datos.setValor(campo, dateFormatter.format(valor));
        } catch (Exception e) {
            try {
                datos.adicionar(campo, dateFormatter.format(valor));
            } catch (Exception ex) {
            }
        }
    }



    /**
     * metodo que devuelve un AtributoValor dado el nombre de la columna
     * @param campo columna de la tabla
     * @return objeto AtributoValor
     */
    protected AtributoValor obtenerAtributoValor(String campo) {
        AtributoValor valor = new AtributoValor();
        try {
            valor = new AtributoValor(campo, this.datos.getValor(campo));
        } catch (Exception e) {
        }
        return valor;
    }

    /**
     * firstDayOfCurentYear : retorna el primer dia del aÃ±o
     * en el formato "MM/dd/yyyy"
     *
     * @return String el primer dia del aÃ±o.
     * EJ. 01/01/2008
     */
    protected String firstDayOfCurentYear() {
        // NOTA:  el objeto SimpleDateFormat no es seguro para multiples hilos.
        // por esta razÃ³n su uso es localizado.  no poner como variable del objeto
        SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_YEAR, 1);
        return dateFormatter.format(cal.getTime());
    }

    /**
     * currentDate : retorna la fecha actual
     * en el formato "MM/dd/yyyy"
     *
     * @return String fecha actual
     * EJ. 06/25/2008
     */
    protected String currentDate(){
        // NOTA:  el objeto SimpleDateFormat no es seguro para multiples hilos.
        // por esta razÃ³n su uso es localizado.  no poner como variable del objeto
        SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
        return dateFormatter.format(Calendar.getInstance().getTime());
    }

    /**
     * blanquearCamposObligatorios:  esta funciÃ³n recorre los campos de la
     * estructura y pone los valores defecto segÃºn el tipo de dato.
     *
     * @param ef
     *
     *   EJ. los campos de tipo "S" quedarÃ¡n con " "
     *   EJ. los campos de tipo "N" quedarÃ¡n con "0"
     *   EJ. los campos de tipo "D" quedarÃ¡n con "08/05/2008"
     */
    protected void blanquearCamposObligatorios(EstructuraFila ef) {
        //      obligatorio que no esten seteados en
        //      data, ponerlos en " ", Ã³ "0" segÃºn el caso
        @SuppressWarnings("unchecked")
        Vector<AtributoTipo> data = ef.estructuraFila;
        //recorre la estructura EstructuraFila
        for (AtributoTipo at : data) {
            if (at.getObligatoriedad()) {
                // Set de los campos tipo S
                if ("S".equalsIgnoreCase(at.getTipo())) {
                    asignarCampo(at.getAtributo(), " ");
                }
                // Set de los campos tipo N
                if ("N".equalsIgnoreCase(at.getTipo())) {
                    asignarCampo(at.getAtributo(), "0");
                }
                // Set de los campos tipo D
                if ("D".equalsIgnoreCase(at.getTipo())) {
                    asignarCampo(at.getAtributo(), currentDate());
                }
            }
        }
    }

}
